home *** CD-ROM | disk | FTP | other *** search
/ Hardcore Visual Basic 5.0 (2nd Edition) / Hardcore Visual Basic 5.0 - Second Edition (1997)(Microsoft Press).iso / Code / drives.cls < prev    next >
Text File  |  1997-06-14  |  2KB  |  83 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "CDrives"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = True
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = True
  10. Option Explicit
  11.  
  12. '$ Uses DRIVE.CLS
  13.  
  14. ' Private version of data structure
  15. Private af As Long
  16.  
  17. Public Enum eeErrorDrives
  18.     eeBaseDrives = 13030    ' CDrives
  19. End Enum
  20.  
  21. Private Sub Class_Initialize()
  22.     ' Initialize internal data
  23.     af = GetLogicalDrives()
  24. End Sub
  25.  
  26. ' Friend properties to make data accessible to data walker class
  27. Friend Property Get DriveFlags() As Long
  28.     DriveFlags = af
  29. End Property
  30.  
  31. ' NewEnum must have the procedure ID -4 in Procedure Attributes dialog
  32. ' Create a new data walker object and connect to it
  33. Public Function NewEnum() As IEnumVARIANT
  34. Attribute NewEnum.VB_UserMemId = -4
  35.     ' Create a new iterator object
  36.     Dim drivewalker As CDriveWalker
  37.     Set drivewalker = New CDriveWalker
  38.     ' Connect it with collection data
  39.     drivewalker.Attach Me
  40.     ' Return it
  41.     Set NewEnum = drivewalker.NewEnum
  42. End Function
  43.  
  44. Public Property Get Count() As Integer
  45.     Dim c As Long, i As Long
  46.     For i = 0 To 25
  47.         If MBytes.RShiftDWord(af, i) And &H1 Then c = c + 1
  48.     Next
  49.     Count = c
  50. End Property
  51.  
  52. ' Default property
  53. Public Property Get Item(v As Variant) As CDrive
  54. Attribute Item.VB_UserMemId = 0
  55.     ' Return default (Nothing) if error
  56.     Dim drive As CDrive
  57.     Set drive = New CDrive
  58.     drive.Root = v
  59.     Set Item = drive
  60. End Property
  61. '
  62.  
  63. #If fComponent = 0 Then
  64. Private Sub ErrRaise(e As Long)
  65.     Dim sText As String, sSource As String
  66.     If e > 1000 Then
  67.         sSource = App.ExeName & ".Drives"
  68.         Select Case e
  69.         Case eeBaseDrive
  70.             BugAssert True
  71.        ' Case ee...
  72.        '     Add additional errors
  73.         End Select
  74.         Err.Raise COMError(e), sSource, sText
  75.     Else
  76.         ' Raise standard Visual Basic error
  77.         sSource = App.ExeName & ".VBError"
  78.         Err.Raise e, sSource
  79.     End If
  80. End Sub
  81. #End If
  82.  
  83.